package org.dtrd.modules.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dtrd.modules.service.entity.bean.PatientServiceRelationInfo;
import org.dtrd.modules.service.entity.bean.ServiceDetailItem;
import org.dtrd.modules.service.entity.bean.ServicePackageInfo;
import org.dtrd.modules.service.entity.po.DtrdEntRdServicePackage;
import org.dtrd.modules.service.entity.bean.ServicePackage;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 服务包信息 服务类
 * </p>
 *
 * @author QR
 * @since 2021-11-19 18:52:54
 */
public interface IDtrdEntRdServicePackageService extends IService<DtrdEntRdServicePackage> {

    /**
     * 删除服务包内容, 同时会删除服务包和服务套餐关系表中的内容
     * @param packageId 服务包id
     * @return 操作结果
     */
    @Transactional(rollbackFor = Exception.class)
    boolean removeServicePackage(Integer packageId);

    /**
     * 获取三个最新的未完成服务
     */
    List<ServiceDetailItem> getThreeUnFinishedServiceDetailLatest(Integer patientId);

    /**
     * 判断是否有同名的服务包
     */
    boolean hasSamePackageName(Integer packageId, String packageName, String orgCode);

    /**
     * 获取患者和服务包的关系信息
     */
    PatientServiceRelationInfo getPatientServiceRelationInfo(Integer patientId, Integer relationId);

    /**
     * 添加服务包
     * @param servicePackageInfo 服务包信息
     * @param orgCode
     * @return 操作结果
     */
    boolean saveOrUpdateServicePackage(ServicePackageInfo servicePackageInfo, String orgCode);

    /**
     * 通过 packageId 获取 packageName
     */
    String getPackageName(Integer packageId);

    /**
     * 获取患者服务中的服务包名字
     */
    String getServingPackageName(Integer patientId);

    /**
     * 获取服务包列表
     * @return 服务包列表
     * @deprecated 方法已弃用，请使用getServicePackageList(ServicePackageListRequest)
     */
    List<ServicePackageInfo> getServicePackageList();

    /**
     * 按照机构查询列表
     * @param orgCode
     * @return
     */
    List<ServicePackageInfo> getServicePackageList(String orgCode);

    ServicePackage getServicePackage(Integer packageId);

    /**
     * 清空某个服务包的内容
     */
    void clearPackage(Integer packageId);

    boolean isValidPackageId(Integer packageId);
}
